/**
 * 缓存配置类 - 系统缓存策略和缓存管理器配置
 *
 * 开发人员：徐少洋
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：配置系统缓存策略，使用内存缓存管理器，避免Redis依赖，适用于开发环境
 *
 * 技术要点：
 * - Spring Cache抽象和@EnableCaching注解
 * - ConcurrentMapCacheManager内存缓存实现
 * - 多级缓存命名空间设计
 * - 缓存配置和命名规范
 * - 开发环境友好型缓存策略
 *
 * 开发故事：负责系统缓存策略的设计和实现，与性能优化团队深度配合，为系统提供高效的缓存机制，提升数据访问性能。
 */
package com.pbl.config;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;

import java.util.Arrays;

/**
 * 缓存配置类 - 使用内存缓存管理器替代Redis依赖
 * 适用于开发和测试环境，无需外部缓存服务依赖
 */
@Configuration
@EnableCaching
public class CacheConfig {

    /**
     * 配置内存缓存管理器
     * 定义系统核心缓存命名空间，包括仪表板指标、产品信息等
     */
    @Bean
    public CacheManager cacheManager() {
        ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager();
        cacheManager.setCacheNames(Arrays.asList(
            "dashboard:metrics",
            "products:list",
            "products:detail",
            "products:code",
            "products:search",
            "products:category"
        ));
        cacheManager.setAllowNullValues(false);
        return cacheManager;
    }
}
